import { defineStore } from 'pinia'
import { ref } from 'vue'
import { getMenuTree, getUserMenuTree, addOrUpdateMenu, deleteMenu } from '@/api/menu'
import { ElMessage } from 'element-plus'

export const useMenuStore = defineStore('menu', () => {
    // 状态
    const menuList = ref([])
    const userMenuList = ref([])
    const loading = ref(false)

    // 获取当前用户的菜单
    const fetchUserMenuTree = async () => {
        try {
            loading.value = true
            const response = await getUserMenuTree()

            if (response.code === 200) {
                userMenuList.value = response.data || []
                // console.log('用户菜单数据已更新:', userMenuList.value)
            } else {
                ElMessage.error(response.message || '获取用户菜单失败')
                userMenuList.value = []
            }
        } catch (error) {
            ElMessage.error('获取用户菜单失败: ' + (error.message || '网络错误'))
            userMenuList.value = []
        } finally {
            loading.value = false
        }
    }

    // 获取菜单树
    const fetchMenuTree = async () => {
        try {
            loading.value = true
            // console.log('开始获取菜单数据...')

            const response = await getMenuTree()
            // console.log('菜单API响应:', response)

            // 修复：判断 code === 200 而不是 code === 0
            if (response.code === 200) {
                menuList.value = response.data || []
                // console.log('菜单数据获取成功:', menuList.value)
            } else {
                // console.error('菜单API返回错误:', response)
                ElMessage.error(response.message || '获取菜单失败')
                // 如果获取失败，使用空数组
                menuList.value = []
            }
        } catch (error) {
            // console.error('获取菜单失败:', error)
            ElMessage.error('获取菜单失败: ' + (error.message || '网络错误'))
            // 如果获取失败，使用空数组
            menuList.value = []
        } finally {
            loading.value = false
        }
    }

    // 新增或更新菜单
    const saveMenu = async (menuData) => {
        try {
            loading.value = true
            // console.log('保存菜单数据:', menuData)

            // 修复：处理 ID 字段
            const processedData = {
                ...menuData,
                id: menuData.id === '00000000-0000-0000-0000-000000000000' ? '00000000-0000-0000-0000-000000000000' : menuData.id,
                parentId: menuData.parentId || null
            }

            // console.log('处理后的菜单数据:', processedData)

            const response = await addOrUpdateMenu(processedData)
            // console.log('保存菜单响应:', response)

            // 修复：判断 code === 200 而不是 code === 0
            if (response.code === 200) {
                ElMessage.success(menuData.id && menuData.id !== '00000000-0000-0000-0000-000000000000' ? '菜单更新成功' : '菜单创建成功')
                // 重新获取菜单数据
                await fetchMenuTree()
                // 同时刷新用户菜单数据，确保布局组件菜单栏及时更新
                await fetchUserMenuTree()
                return true
            } else {
                ElMessage.error(response.message || '保存菜单失败')
                return false
            }
        } catch (error) {
            // console.error('保存菜单失败:', error)
            ElMessage.error('保存菜单失败: ' + (error.message || '网络错误'))
            return false
        } finally {
            loading.value = false
        }
    }

    // 删除菜单
    const removeMenu = async (menuId) => {
        try {
            loading.value = true
            console.log('删除菜单ID:', menuId)

            const response = await deleteMenu(menuId)
            console.log('删除菜单响应:', response)

            // 修复：判断 code === 200 而不是 code === 0
            if (response.code === 200) {
                ElMessage.success('菜单删除成功')
                // 重新获取菜单数据
                await fetchMenuTree()
                // 同时刷新用户菜单数据
                await fetchUserMenuTree()
                return true
            } else {
                ElMessage.error(response.message || '删除菜单失败')
                return false
            }
        } catch (error) {
            // console.error('删除菜单失败:', error)
            ElMessage.error('删除菜单失败: ' + (error.message || '网络错误'))
            return false
        } finally {
            loading.value = false
        }
    }

    // 刷新所有菜单数据
    const refreshAllMenus = async () => {
        try {
            loading.value = true
            console.log('开始刷新菜单数据...')
            await Promise.all([
                fetchMenuTree(),
                fetchUserMenuTree()
            ])
            console.log('菜单数据刷新完成，当前用户菜单:', userMenuList.value)
        } catch (error) {
            console.error('刷新菜单数据失败:', error)
        } finally {
            loading.value = false
        }
    }

    return {
        menuList,
        userMenuList,
        loading,
        fetchUserMenuTree,
        fetchMenuTree,
        saveMenu,
        removeMenu,
        refreshAllMenus
    }
})
